package com.zretc.util;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.*;

/**
 * @author 周文涛
 * 文涛出版社出版工具，导入时第一行为与实体类对应名字的字段名
 */
public class ExcelImportUtil {

    public static List<Object> importExcel(InputStream inputStream,Object object){
        try{
            // 1.获取Excel对象
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream);
            // 2.获取第一个工作蒲
            HSSFSheet sheet = hssfWorkbook.getSheetAt(0);
            // 3.获取实体类的所有字段名
            Class<?> aClass = object.getClass();
            Field[] fields = aClass.getDeclaredFields();
            Set<String> fieldName = new HashSet<>();
            for (int i = 0; i<fields.length;i++) {
                fieldName.add(fields[i].getName()) ;
            }
            // 4.获取表格第一行
            HSSFRow row = sheet.getRow(0);
            // 5.获取第一行的字段,判断对应行
            Map<Integer,String> map = new HashMap<>();
            for(int i = 0; i<row.getLastCellNum();i++){
                String stringCellValue = row.getCell(i).getStringCellValue();
                if(fieldName.contains(stringCellValue)){
                    map.put(i,stringCellValue);
                }
            }
            // 6.获取数据
            // 创建列表
            List<Object> list = new ArrayList<>();
            for(int i = 1; i<=sheet.getLastRowNum();i++){
                HSSFRow sheetRow = sheet.getRow(i);
                // 创建对象
                Object o = aClass.newInstance();
                for(int j = 0; j <= sheetRow.getLastCellNum();j++){
                    if(map.get(j)!=null){
                        ReflectUtil.setValue(map.get(j),sheetRow.getCell(j).getStringCellValue(),o);
                    }
                }
                list.add(o);
            }

            return list;



        }catch (Exception e){
            e.printStackTrace();
        }


        return null;
    }
}
